package eu.tsp.isensors.impl.translator;

import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.ServiceProperty;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.Property;


import eu.tsp.isensors.services.translateData.TranslateData;

@Component
@Provides
public class TranslatorImpl implements TranslateData{
	@Property(mandatory=true)
	String scriptID;
	
	@Property(mandatory=true)
	String configID;
	
	@Requires
	public eu.tsp.isensors.services.storage.Put m_put; // Service Dependency
   
	@Requires
	public eu.tsp.isensors.services.index.RunXQuery m_runquey;// Service Dependency
	
	//@Requires
	//public eu.tsp.isensors.services.alert.gen.TranslatedData m_translatedData;// Service Dependency
	
	// Retourne null en cas de prob. au cours de la transformation ou l'id de la donnée transformé
	public String translate(String nodeID, String uri, String data_id){ //retourene l'id de la nouvelle version de données, mais ça peut à ne rien servire du coté de (l'Alert Gen.)
		byte[] b = m_runquey.execScript(nodeID, data_id, scriptID.replaceAll("NODEID", nodeID), configID.replaceAll("NODEID", nodeID));
		String trDataID;
		if(b==null || b.length ==0 || (new String(b)).contains("<h2>HTTP ERROR: 404</h2>") ) // Transformation pas faites ou script inexistant
			return null;
		else{
			trDataID = m_put.put(data_id.replaceAll("data", "trdata"), b); // On modiife l'id en changeant data -> trdata pour conserver le même nom de fichier et arborescence
			if(trDataID != null){
				System.out.println("> translate : " + trDataID);
				//m_translatedData.thisIsTrID(nodeID, uri, trDataID); // On envoie les données à l'Alert generator
			}
		}	
		return trDataID;	
	}
}
